package in.rob.client.dialog; import in.lib.Constants; import in.lib.annotation.InjectView; import in.lib.annotation.OnClick; import in.lib.handler.UserFollowResponseHandler; import in.lib.handler.UserUnFollowResponseHandler; import in.lib.helper.ThemeHelper; import in.lib.manager.APIManager; import in.lib.manager.UserManager; import in.lib.utils.Dimension; import in.lib.utils.Views; import in.lib.view.LinkTouchMovementMethod; import in.lib.view.LinkifiedTextView; import in.model.SimpleUser; import in.model.User; import in.rob.client.MainApplication; import in.rob.client.ProfileActivity; import in.rob.client.R; import in.rob.client.base.RobinDialogActivity; import in.rob.client.dialog.base.DialogBuilder; import java.util.ArrayList; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Bitmap; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.PopupMenu; import android.widget.PopupMenu.OnMenuItemClickListener; import android.widget.TextView; import android.widget.Toast; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.assist.ImageLoadingListener; import com.nostra13.universalimageloader.core.assist.ImageScaleType; public class PopupProfileDialog extends RobinDialogActivity implements OnClickListener { private User user; @InjectView(R.id.avatar_image) public ImageView avatar; @InjectView(R.id.cover_image) public ImageView cover; @InjectView(R.id.bio_text) public LinkifiedTextView bio; @InjectView(R.id.followers) public TextView followers; @InjectView(R.id.mention_name) public TextView mentionName; @InjectView(R.id.username) public TextView userName; @OnClick @InjectView(R.id.icon_follow) public ImageButton follow; @OnClick @InjectView(R.id.icon_mention) public ImageButton mention; @OnClick @InjectView(R.id.icon_message) public ImageButton message; @OnClick @InjectView(R.id.icon_more) public ImageButton more; @OnClick @InjectView(R.id.icon_profile) public ImageButton profile; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.popup_user_dialog); Views.inject(this); Dimension d = new Dimension(this); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); } else { getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); } getWindow().setGravity(Gravity.CENTER); getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.dialog_bg)); user = (User)getIntent().getExtras().getParcelable(Constants.EXTRA_USER); String bioText = user.getFormattedDescription(); bio.setLinkMovementMethod(new LinkTouchMovementMethod()); bio.setText(bioText); if (TextUtils.isEmpty(bioText)) { ((View)bio.getParent()).setVisibility(View.GONE); } userName.setText(user.getUserName()); mentionName.setText("@" + user.getMentionName()); if (!user.isAvatarDefault()) { ImageLoader.getInstance().displayImage(user.getAvatarUrl() + "?avatar=1&id=" + user.getId(), avatar, MainApplication.getAvatarImageOptions()); } if (!user.isCoverDefault()) { DisplayImageOptions opts = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisc(true) .showStubImage(R.drawable.default_cover) .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) .resetViewBeforeLoading(true) .showImageForEmptyUri(R.drawable.default_cover) .build(); ImageLoader.getInstance().displayImage(user.getCoverUrl(), cover, opts, new ImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view){} @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason){} @Override public void onLoadingCancelled(String imageUri, View view){} @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { ((ImageView)view).setScaleType(ScaleType.CENTER_CROP); } }); } followers.setText(getString(R.string.follows_following, user.getFollowingCount(), user.getFollowersCount())); if (user.isYou()) { follow.setVisibility(View.INVISIBLE); mention.setVisibility(View.INVISIBLE); message.setVisibility(View.INVISIBLE); more.setVisibility(View.INVISIBLE); } else { if (user.getYouFollow()) { follow.setContentDescription(getString(R.string.unfollow)); follow.setImageResource(ThemeHelper.getDrawableResource(getContext(), R.attr.rbn_popup_profile_icon_unfollow)); } } } @Override public void onClick(View v) { if (v == message) { ArrayList<SimpleUser> recipients = new ArrayList<SimpleUser>(); recipients.add(SimpleUser.parseFromUser(UserManager.getUser())); recipients.add(SimpleUser.parseFromUser(user)); Intent messageActivity = new Intent(getContext(), NewChannelDialog.class); messageActivity.putExtra(Constants.EXTRA_USER_LIST, recipients); getContext().startActivity(messageActivity); } else if (v == mention) { Intent inReply = new Intent(getContext(), NewPostDialog.class); inReply.putExtra(Constants.EXTRA_MENTION_NAME, user.getMentionName()); getContext().startActivity(inReply); } else if (v == follow) { if (user.getYouFollow()) { user.setYouFollow(false); follow.setContentDescription(getString(R.string.follow)); follow.setImageResource(ThemeHelper.getDrawableResource(getContext(), R.attr.rbn_popup_profile_icon_follow)); APIManager.getInstance().unfollowUser(user.getId(), new UserUnFollowResponseHandler() { @Override public void onFinish(boolean failed) { super.onFinish(failed); if (failed) { Context c = PopupProfileDialog.this.getContext(); user.setYouFollow(true); follow.setContentDescription(getString(R.string.unfollow)); follow.setImageResource(ThemeHelper.getDrawableResource(c, R.attr.rbn_popup_profile_icon_unfollow)); if (c != null) { String message = c.getString(R.string.unfollow_failed) + " @" + user.getMentionName(); Toast.makeText(c, message, Toast.LENGTH_LONG).show(); } } } }); } else { user.setYouFollow(true); follow.setContentDescription(getString(R.string.unfollow)); follow.setImageResource(ThemeHelper.getDrawableResource(getContext(), R.attr.rbn_popup_profile_icon_unfollow)); APIManager.getInstance().followUser(user.getId(), new UserFollowResponseHandler() { @Override public void onFinish(boolean failed) { super.onFinish(failed); if (failed) { Context c = PopupProfileDialog.this.getContext(); user.setYouFollow(false); follow.setContentDescription(getString(R.string.follow)); follow.setImageResource(ThemeHelper.getDrawableResource(c, R.attr.rbn_popup_profile_icon_follow)); if (c != null) { String message = c.getString(R.string.follow_failed) + " @" + user.getMentionName(); if (getConnectionInfo().responseCode == 507) { message = c.getString(R.string.too_many_follow); } Toast.makeText(c, message, Toast.LENGTH_LONG).show(); } } } }); } user.save(); } else if (v == more) { ArrayList<String> options = new ArrayList<String>(); options.add(user.isMuted() ? getString(R.string.unmute) : getString(R.string.mute)); options.add(user.isBlocked() ? getString(R.string.unblock) : getString(R.string.block)); //options.add(getString(R.string.report)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { final PopupMenu moreoptions; moreoptions = new PopupMenu(getContext(), more); for (int index = 0; index < options.size(); index++) { moreoptions.getMenu().add(0, index, 0, options.get(index)); } moreoptions.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { int index = item.getItemId(); handleUserOption(index); moreoptions.dismiss(); return true; } }); moreoptions.show(); } else { DialogBuilder.create(getContext()) .setTitle(R.string.pick_option) .setItems(options.toArray(new String[options.size()]), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { handleUserOption(which); dialog.dismiss(); } }) .show(); } return; } else if (v == profile) { Intent intent = new Intent(getContext(), ProfileActivity.class); intent.putExtra(Constants.EXTRA_USER, user); getContext().startActivity(intent); } //finish(); } public void handleUserOption(int index) { if (index == 0) { if (user.isMuted()) { unmute(); } else { mute(); } } else if (index == 1) { if (user.isBlocked()) { unblock(); } else { block(); } } else if (index == 2) { report(); } user.save(); } public void unmute() { Toast.makeText(getContext(), R.string.user_unmuted, Toast.LENGTH_SHORT).show(); user.setMuted(false); APIManager.getInstance().unMuteUser(user.getId(), null); } public void mute() { Toast.makeText(getContext(), R.string.user_muted, Toast.LENGTH_SHORT).show(); user.setMuted(true); APIManager.getInstance().muteUser(user.getId(), null); } public void unblock() { Toast.makeText(getContext(), R.string.user_unblocked, Toast.LENGTH_SHORT).show(); user.setBlocked(false); APIManager.getInstance().unblockUser(user.getId(), null); } public void block() { Toast.makeText(getContext(), R.string.user_blocked, Toast.LENGTH_SHORT).show(); user.setBlocked(true); APIManager.getInstance().blockUser(user.getId(), null); } public void report() { } }